package org.example.util;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;

import java.util.HashMap;

/**
 * JWT工具类（基于JJWT 0.12.x）
 */
public class JwtUtil {

    //签名秘钥
    private static final String secret = "10d5adwadh/WDAWdaw5Ynd";

    /**
     * 创建token
     * @param userJson
     * @return
     */
    public static String createToken(String userJson){
        //组装头部数据
        HashMap<String, Object> header = new HashMap<>();
        header.put("alg","HS256");
        header.put("typ","JWT");
        return JWT.create()
            //头header
            .withHeader(header)
            //负载payload
            .withClaim("user",userJson)
            //签名sign
            .sign(Algorithm.HMAC256(secret));
    }

    /**
     *
     * 验证token
     * @param token
     * @return
     */
    public static Boolean verifyToken(String token){
        try{
            //使用秘钥创建一个解析对象
            JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(secret)).build();
            //验证token，如果没有抛出异常表示验证通过
            jwtVerifier.verify(token);
            return true;
        }catch (Exception e){
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 解析token
     * @param token
     * @return
     */
    public static String parseToken(String token){
        JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(secret)).build();
        DecodedJWT decodedJWT = jwtVerifier.verify(token);
        return decodedJWT.getClaim("user").asString();
    }
}
